package com.ylfstu.arrays_;

import java.awt.image.AreaAveragingScaleFilter;
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

/**
 * @author:Joy_Yang
 * @date:2022/9/28
 * @version:1.0
 */
public class ArraysMethod {
    public static void main(String[] args) {

//        Integer[] integers = new Integer[] {1, 3, 6, 9, 10};
//        //1. toString返回数组的字符串形式
//        System.out.println(Arrays.toString(integers));
        //2.sort 排序 因为数组是引用类型，所以通过sort排序后，会直接影响到实参
        Integer[] arr = {-8, 3, 0, -1, 4, -4 , 9};
        Arrays.sort(arr);
//        System.out.println(Arrays.toString(arr));
//        //sort重载，可以通过传入一个接口 Comparator 实现定制排序
//        //调用定制方法时，传入两个参数 1）排序的数组arr
//        // 2）实现了Comparator接口的匿名内部类 实现compare方法
//        //int compare(Integer o1, Integer o2) 的结果会直接影响排序的从小到大还是从大到小
        Arrays.sort(arr, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                Integer i1 = (Integer) o1;
                Integer i2 = (Integer) o2;
                return i2 - i1;
            }
        });
        System.out.println(Arrays.toString(arr));

        //1.使用 BinarySearch 二叉查找
        //2.要求该数组是有序的，如果该数组无序，不能使用binarySearch
        //3.如果数组中不存在该元素，就返回 -(low + 1)
//        Integer[] arr = {23, 34, 65, 77, 123};
//        int index = Arrays.binarySearch(arr, 78);
//        System.out.println("index= " + index);

        //copyOf 数组元素的复制
        //1.从arr数组中，拷贝arr.length个元素到 newArray数组中
        //2. 如果拷贝的长度 > arr.length 就在新数组的后面 增加null
        //3. 如果拷贝的长度 < 0 就抛出异常NegativeArraySizeException
        Integer[] newArr = Arrays.copyOf(arr, arr.length);
        System.out.println(Arrays.toString(newArr));

        //fill数组填充
        Integer[] num = new Integer[]{9, 3, 2};
        Arrays.fill(num, 99);
        System.out.println(Arrays.toString(num));

        //equals 比较两个数组元素内容是否完全一致
        Integer[] arr2 = {1, 2, 90, 123, 567};
        boolean equals = Arrays.equals(arr, arr2);
        System.out.println(equals);

        //asList 将一组值，转换为list
        //1.asList方法，会将(2,3,4,5,6,1)数据转成一个List
        //asList的运行类型class java.util.Arrays$ArrayList
        List asList = Arrays.asList(2,3,4,5,6,1);
        System.out.println("asList=" + asList);
        System.out.println("asList的运行类型" + asList.getClass());
    }
}
